Skip to content
On this page

프레임워크 없는 프론트엔드 개발

도서 링크: https://www.yes24.com/Product/Goods/96639825

프레임워크 없는 프론트엔드 개발

3장. DOM 이벤트 관리

YAGNI 원칙

You aren’t gonna need it.

정말 필요하다고 간주할 때까지 기능을 추가하지 마라

DOM 이벤트 관련 사전 지식

이벤트란?

웹 어플리케이션에서 발생하는 동작으로 다양한 이벤트 타입이 존재한다.

속성에 핸들러 연결

on 속성을 통해 DOM 요소에 이벤트를 연결할 수 있음

const button = document.querySelector("button");
button.onclick = () => {
console.log("click!")
}

한번에 하나의 핸들러만 연결할 수 있어서, 손실되기 쉽다는 단점이 있다.

addEventListener 로 핸들러 연결

addEventListener 를 통해서 DOM 노드에 이벤트를 추가할 수 있다.

첫 번째 매개변수는 이벤트 타입, 두 번째 매개변수는 콜백 함수로 이벤트가 트리거될 때 호출된다.

복수의 핸들러를 연결할 수 있다.

removeEventListener 를 통해 핸들러를 제거할 수 있다. 이때 callback 함수의 참조를 유지해야한다.

이벤트 객체

웹 어플리케이션에 전달된 모든 이벤트에는 Event 인터페이스를 구현한다.

이벤트의 종류에 따라 확장된 이벤트 사용할 수 있다.

DOM 이벤트 라이프 사이클

addEventListener 의 세 번째 매개변수는 useCapture로 기본 값은 false

이벤트 버블링: 이벤트 target 노드에서 부터 시작해 모든 조상요소로 이벤트가 전파

이벤트 캡쳐링: 조상요소에서 부터 시작해 이벤트 target 노드까지 이벤트가 전파

stopPropagation 을 통해 버블 체인을 중단할 수 있다.

캡쳐 단계: 이벤트가 html에서 목표 요소로 이동

목표 단계: 목표 요소 도달

버블 단계: 목표 요소에서 html 로 이동

사용자 정의 이벤트

CustomEvent 생성자 함수를 통해서 사용자 정의 이벤트를 생성할 수 있다.

dispatchEvent 를 통해서 이벤트를 발생시키고, addEventListener 로 표준 이벤트 리스너를 추가할 수있다.

TodoMVC 에 이벤트 추가

문자열에는 이벤트 핸들러를 추가할 수 없기 때문에 document.createElement API를 사용해 새 DOM 노드를 생성할 수 있다.

template 태그: 렌더링 엔진의 스탬프로 사용할 수 있는 보이지 않는 태그

기본 이벤트 처리 아키텍쳐

초기 상태를 기반으로 렌더링 → 이벤트 발생 → 새로운 상태 생성 → 새로운 상태 기반으로 리렌더링

각각의 구성 요소에 events 를 바인딩.

이벤트 위임

리스트의 경우 매번 모든 리스트 요소에 이벤트를 핸들링하는 것보다, 부모 요소에 이벤트를 핸들링해 하위요소에서 이벤트가 울렸는지 확인하는 것이 성능상 좋다.

최근 수정 일: 2023. 11. 13.